// 封装axios
// 在入口文件中导入
import axios from 'axios'
import {
  Toast
} from 'vant'

export {
  axios
}

// axios.defaults.baseURL = 'http://localhost:2116/'; // 基本路径 
// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

// Interceptors 拦截器  (ajax 请求成功或者请求响应做一些业务逻辑  弹框提示  数据提示  )

// Add a request interceptor  请求的拦截器  request
axios.interceptors.request.use(function (config) {
  // Do something before request is sent
  // 请求发送之前做一些事情  (唤起Loading)
  ShowLoading()
  return config;
}, function (error) {
  // 请求失败 
  ShowError('请求失败')
  return Promise.reject(error);
});


// Add a response interceptor  响应的拦截器 response
axios.interceptors.response.use(function (response) {
  // 响应成功 提示
//   console.log(response.data)
  // ShowSuccess('请求成功')
  Toast.clear()
  return response;

}, function (error) {
  // 响应失败 跨域 504 404 
  ShowError('响应失败')
  return Promise.reject(error);
});


// GET
export const Get = function (url, params, headers) {
  return new Promise(function (resolve, reject) {
    axios({
        url,
        method: "GET",
        params, // ?id=2116
        headers // 请求头 
      })
      .then(res => {
        resolve(res.data) // 成功回调  res.data axios 保证在 data 
      })
      .catch(err => {
        reject(err)
      })
  })
}
// POST
export const Post = function (url, data, params, headers) {
  return new Promise(function (resolve, reject) {
    axios({
        url,
        method: "POST",
        data, // post 请求提交的数据 
        params, // ?id=2116
        headers // 请求头 
      })
      .then(res => {
        resolve(res.data) // 成功回调  res.data axios 保证在 data 
      })
      .catch(err => {
        reject(err)
      })
  })
}
// PATCH 
export const Patch = function (url, data, params, headers) {
  return new Promise(function (resolve, reject) {
    axios({
        url,
        method: "PATCH",
        data, //  修改的数据  
        params, // ?id=2116
        headers // 请求头 
      })
      .then(res => {
        resolve(res.data) // 成功回调  res.data axios 保证在 data 
      })
      .catch(err => {
        reject(err)
      })
  })
}
// DELETE 
export const Delete = function (url, data, params, headers) {
  return new Promise(function (resolve, reject) {
    axios({
        url,
        method: "DELETE",
        // data,  // 
        // params,   // ?id=2116
        // headers   // 请求头 
      })
      .then(res => {
        resolve(res.data) // 成功回调  res.data axios 保证在 data 
      })
      .catch(err => {
        reject(err)
      })
  })
}




// 封装Toast相关函数  用于请求的反馈
let Load = null
export function ShowLoading(msg = "加载中...") {
  Toast.clear()
  Load = Toast.loading({
    forbidClick: true,
    message: msg,
  });
}

export function ShowError(msg = "未知错误") {
  Toast.clear()
  Toast.fail(msg);
}

export function ShowSuccess(msg = "成功") {
  Toast.clear()
  Toast.success(msg);
}
